package DesignPattern.Composite;

/**
 * @Author self
 * @Date 2024/8/13 20:14
 */
/*组合模式（Composite Pattern）是一种结构型设计模式，它允许你将对象组合成树形结构来表示部分-整体的层次结构。
        组合模式使得客户端对单个对象和组合对象的使用具有一致性。*/
/*场景说明
        假设我们有一个公司组织结构，包含不同的员工类型（如普通员工和经理）。
        经理可以管理其他员工（包括普通员工和其他经理）。我们可以使用组合模式来表示这种树形结构。*/
/*优点
        树形结构表示部分-整体层次：组合模式可以方便地表示复杂的树形结构，例如公司组织结构、文件系统结构等。
        一致性操作：组合模式使得客户端可以一致地处理单个对象和组合对象，简化了代码结构。
        易于扩展：添加新的员工类型或管理层时，只需要实现 Employee 接口，容易扩展。
适用场景
        需要表示对象的部分-整体层次结构时，如文件系统、公司组织结构、GUI 组件树等。
        需要让客户端统一处理单个对象和组合对象时。*/
public class CompositePatternDemo {
    public static void main(String[] args) {
        Employee dev1 = new Developer("Alice", "Senior Developer");
        Employee dev2 = new Developer("Bob", "Junior Developer");
        Employee designer1 = new Designer("Charlie", "UI/UX Designer");

        Manager engManager = new Manager("David", "Engineering Manager");
        engManager.addEmployee(dev1);
        engManager.addEmployee(dev2);

        Manager generalManager = new Manager("Eve", "General Manager");
        generalManager.addEmployee(engManager);
        generalManager.addEmployee(designer1);

        // Display all employees
        generalManager.showEmployeeDetails();
    }
}

